package com.excel.poi.util;

import com.excel.poi.ali.AnalysisEventListener;
import com.excel.poi.ali.ExcelReader;
import org.springframework.stereotype.Component;

import java.io.InputStream;
/**
 *SAX全称Simple API for XML，它是一个接口，也是一个软件包。它是一种XML解析的替代方法，
 * 不同于DOM解析XML文档时把所有内容一次性加载到内存中的方式，它逐行扫描文档，一边扫描，一边解析。
 * 所以那些只需要单遍读取内容的应用程序就可以从SAX解析中受益，这对大型文档的解析是个巨大优势。
 * 另外，SAX “推" 模型可用于广播环境，能够同时注册多个ContentHandler，并行接收事件，而不是在一个管道中一个接一个地进行处理。
 * 一些支持 SAX 的语法分析器包括 Xerces，Apache parser（以前的 IBM 语法分析器）、MSXML（Microsoft 语法分析器）
 * 和 XDK（Oracle 语法分析器）。这些语法分析器是最灵活的，因为它们还支持 DOM。
 * @param in
 * @param excelImportVo
 * @return
 * @throws Exception
 */
/**
 * @author 赵玮
 * @Description 1  https://www.cnblogs.com/wangchl/p/11400025.html 这个博客可以帮助我们更好理解sax解析
 *              2  写这个sax解析 easypoi和easyexcel两个好像都有点小问题
 *              easypoi 换了个版本sax解析报错了就，可能没玩明白不知道为啥
 *              easyexcel 这个解析没有问题，就是一行行解析的时候那个对象，转为泛型那个对象时会报错，也不会玩，
 *               所以就自己借鉴(抄)了一下easyexcel源码 easypoi在解析没有借鉴，但是在导入时借鉴了的，(尤其数据脱敏，我本人觉得很实用)
 * @create /2022/3/25
 */
@Component
public class ExcelUtilSax {


    /**
     * 1构造函数赋值 给属性 流 和监听器
     * 2目前支持头占一行，否则报错 (sax是一行一行解析)
     * 3 saveFieldValue 这个方法可以修改，如果类型不满足你的需要，自行添加匹配
     * @param in
     * @param listener
     * @throws Exception
     */
    public void readBySax(InputStream in, Class c1,AnalysisEventListener listener) throws Exception {
        ExcelReader excelReader = new ExcelReader(in, c1,listener, true);
        //2
        excelReader.read();

    }


}
